#include <stddef.h>
#include <limits.h>
#include "FLOW_ents/e_cmpnt_update_freq.h"
#include "FLOW_ents/Component.h"

namespace ENTS
{
	DEFINE_RTTI_ROOT_CLASS( CComponent );

	//=============================================================================

	CComponent::CComponent( ) 
		: m_p_entity( NULL )
		, m_u_priority( UINT_MAX )
		, m_b_bindings_completed( false )
		, m_u_update_freq( CMPNT_UPDATE_FREQ_X1 )
		, m_b_enabled( false )
		, m_b_initialized( false )
	{
	}

	//=============================================================================

	CComponent::~CComponent( )
	{
		m_b_enabled = false;

		if( m_b_initialized )
		{
			Reset( );
			m_b_initialized = false;
		}
	}

	//=============================================================================

	bool_t CComponent::BindingsCompleted( void ) const
	{
		return m_b_bindings_completed;
	}

	//=============================================================================

	bool_t CComponent::IsInitialized( void ) const
	{
		return m_b_initialized;
	}

	//=============================================================================

	bool_t CComponent::IsEnabled( void ) const
	{
		return m_b_enabled;
	}

	//=============================================================================

	void CComponent::SetEnabled( bool_t ab_enabled )
	{
		m_b_enabled = ab_enabled;
	}

	//=============================================================================

	u32_t CComponent::GetPriority( void ) const
	{
		return m_u_priority;
	}

	//=============================================================================

	void CComponent::SetEntity( CEntity* ap_ent )
	{
		m_p_entity = ap_ent;
	}

	//=============================================================================

} //namespace ENTS